使用 Verdaccio 搭建私有 npm 服务器

MuYan2022-05-06web

为什么要搭建 npm 服务器

  • 比如公司或者个人开发的一些可复用的模块、CLI 等, 为了方便统一管理、开发和使用。
  • 开发的这些模块、CLI 并不希望其他人看到等原因

安装与使用

  • 先自行安装好 node、pm2

  • node 用于安装 verdaccio,pm2 用于启用 verdaccio

  • node 安装后,一定要确定 node 的安装路径,后面有用

  • 安装 verdaccio 至全局

npm i -g verdaccio
  • 安装好后确定下 verdaccio 路径,verdaccio 路径规则为 node 路径/bin/verdaccio

  • 比如我这里的 nodejs 路径为 /www/server/nodejs/v12.16.3/,那 verdaccio 路径就是 /www/server/nodejs/v12.16.3/bin/verdaccio

  • 第一次启动 verdaccio,通过 verdaccio 路径启动,会生成 verdaccio/config.yaml 文件,可以在日志内看到

/www/server/nodejs/v12.16.3/bin/verdaccio
  • 建议通过软连接的方式启动,类似于映射
# ln -s [verdaccio 路径] /usr/local/bin/
ln -s /www/server/nodejs/v12.16.3/bin/verdaccio /usr/local/bin/

# 软连接后启动方式:
verdaccio

打印的日志:

warn --- config file  - /root/.config/verdaccio/config.yaml
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
(node:19294) [LRU_CACHE_OPTION_maxAge] DeprecationWarning: The maxAge option is deprecated. Please use options.ttl instead.
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
 warn --- Plugin successfully loaded: verdaccio-htpasswd
 warn --- Plugin successfully loaded: verdaccio-audit
 warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.10.1
  • 由日志可知 config.yaml 在 /root/.config/verdaccio/ 下

  • http://0.0.0.0:4873/ 是默认访问地址跟端口,0.0.0.0 是默认访问地址,指向你,4873 是 verdaccio 的默认端口

    • 在服务器中,0.0.0.0 指的是本机上的所有 IPV4 地址,如果一个主机有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0,那么通过两个 ip 地址都能够访问该服务。
    • 在路由中,0.0.0.0 表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。
  • 服务器环境记得开放该端口的安全组

  • 打开 config.yaml,并在文件最后写上 listen: 0.0.0.0:4873,这里的端口可以改成你想要的端口号,记得开发端口相关安全组

listen: 0.0.0.0:4873
  • 访问 verdaccio,本地可以通过 localhost:4873,服务器通过 【当前服务器 IP】:4873 访问

  • 使用 PM2 启动 verdaccio 服务,更多 PM2 命令自行百度
pm2 start /www/server/nodejs/v12.16.3/bin/verdaccio
# 软连接后启动方式:
pm2 start verdaccio

npm 包发布

  • 先在本地创建 npm 包
# 生成基础文件
npm init
# 创建一个demo.js
# demo.js
module.exports = () => {
  console.log("这是一个DEMO");
};
  • 本地登录/注册,会让你输入账户/密码/邮箱,账户名要小写
npm adduser --registry [verdaccio 服务访问地址]
# 提示以下内容,说明登录成功
Logged in as [账户名] on [verdaccio 服务访问地址].
# 登录成功后,发布 npm 包
npm publish --registry [verdaccio 服务访问地址]
# 发布后在 [verdaccio 服务访问地址] 刷新就能看到 publish 上来 npm 包
  • F5 刷新 【verdaccio】 就可以看到刚刚发布的 test 包

npm install test

npm 包删除

  • 登录到服务器,执行 verdaccio(已配置了软连接),查看 config 地址
verdaccio
# 日志
warn --- config file  - /root/.config/verdaccio/config.yaml
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
(node:19294) [LRU_CACHE_OPTION_maxAge] DeprecationWarning: The maxAge option is deprecated. Please use options.ttl instead.
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
 warn --- Plugin successfully loaded: verdaccio-htpasswd
 warn --- Plugin successfully loaded: verdaccio-audit
 warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.10.1

# verdaccio npm 包地址规则:[verdaccio config地址]/storage
# 由上面的日志可知, verdaccio npm 包地址为 /root/.config/verdaccio/storage
cd /root/.config/verdaccio/storage
ls
rm -rf [要删除的包]
# 删除后 F5 刷新 verdaccio 页面

禁用注册

修改 verdaccio 的【config.yaml】文件的 max_users 值为-1

# config.yaml
auth:
  htpasswd:
    # 存储了加密认证信息的 htpasswd 文件
    file: ./htpasswd
    # 允许注册的用户最大数量, 默认值是 "+inf",即不限制
    # 可以将此值设置为-1 以禁用新用户注册。
    max_users: -1
  • 更改 package 权限,只有注册用户可访问、发布包
# config.yaml
packages:
  '@*/*':
    # 默认为 $all 所有人,改成 $authenticated 已注册的用户
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs

  '**':
    # 默认为 $all 所有人,改成 $authenticated 已注册的用户
    access: $authenticated
  • 修改 config.yaml 后,记得重启【verdaccio】服务
上次更新 2026/6/23 11:49:15
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8